﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ClienteWinMGI.AccesoDatos;
using ComunesMGI.DataTypes;
using ComunesMGI.Enums;
using ComunesMGI.Condiciones;

namespace ClienteWinMGI.Logica
{
    public class CtrIncidentes:IIncidentes
    {
        #region IIncidentes Members


        public List<DataIncidente> GetIncidentes(int idSis, List<Condicion> condiciones)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes incidentes = acceso.getIMGIIncidentes();
            return incidentes.GetIncidentes(idSis,condiciones);
        }

        public List<DataTarea> GetTareas(int sistema, int incidente)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes incidentes = acceso.getIMGIIncidentes();
            return incidentes.GetTareas(sistema, incidente);
        }

        public List<DataCampo> GetCampos(int idSistema, Lista lista)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes incidentes = acceso.getIMGIIncidentes();
            return incidentes.GetCampos(idSistema,lista);
        }

        public bool AsignarResposable(int sistema, int incidente, DataTarea tarea, DataUsuario usuario)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes incidentes = acceso.getIMGIIncidentes();
            return incidentes.AsignarResposable(sistema,incidente, tarea, usuario);
        }

        public DataAltaIncidente AddIncidente(DataSistema incidente, List<string> archivos)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes incidentes = acceso.getIMGIIncidentes();
            return incidentes.AddIncidente(incidente,archivos);
        }

       

        public int AddWorkPackage(int idSis, DataWP wp)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes incidentes = acceso.getIMGIIncidentes();
            return incidentes.AddWorkPackage(idSis,wp);
        }

       

        public List<DataWP> GetWorkPackages(int idSistema) 
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes incidentes = acceso.getIMGIIncidentes();
            return incidentes.GetWorkPackages(idSistema);
        
        }

        
        public void AsociarIncidentesWP(int idSis, int idWp, List<int> incidentes)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes inc = acceso.getIMGIIncidentes();
            inc.AsociarIncidentesWP(idSis, idWp, incidentes);
        }

        public List<DataIncidenteReporte> GetIncidentesCerradosPeriodo(List<int> sistemas, DateTime fechaDesde, DateTime fechaHasta)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes inc = acceso.getIMGIIncidentes();
            return inc.GetIncidentesCerradosPeriodo(sistemas, fechaDesde, fechaHasta);
        }

        public List<DataIncidenteReporte> GetIncidentesCreadosPeriodo(List<int> sistemas, DateTime fechaDesde, DateTime fechaHasta)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes inc = acceso.getIMGIIncidentes();
            return inc.GetIncidentesCreadosPeriodo(sistemas, fechaDesde, fechaHasta);
        }

       

        public List<DataIncidente> GetIncidentesWP(int idSis, int idWp)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes inc = acceso.getIMGIIncidentes();
            return inc.GetIncidentesWP(idSis, idWp);
        }

        public List<DataEstadoWP> GetEstadosWP()
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes inc = acceso.getIMGIIncidentes();
            return inc.GetEstadosWP();
        }

        public bool ChkWPIncidentesOTareasSinCerrar(int idWP) 
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes inc = acceso.getIMGIIncidentes();
            return inc.ChkWPIncidentesOTareasSinCerrar(idWP);
        }

        public void ModificarWP(DataWP wp, bool cerrarTodo)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes inc = acceso.getIMGIIncidentes();
            inc.ModificarWP(wp, cerrarTodo);
        
        }

        public List<DataIncidenteReporte> VisualizarIncidentesAsignados(List<int> idSis, string usr, string estado,DateTime fechaDesde, DateTime fechaHasta)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes inc = acceso.getIMGIIncidentes();
            return inc.VisualizarIncidentesAsignados(idSis, usr,estado, fechaDesde, fechaHasta);
        }


        public List<DataIncidente> GetIncidentesAsignablesWP(int wkpCod)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes inc = acceso.getIMGIIncidentes();
            return inc.GetIncidentesAsignablesWP(wkpCod);
        }

        public DataAltaTarea AddTarea(int siscod, int idIncidente, List<DataCampo> campos)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes inc = acceso.getIMGIIncidentes();
            return inc.AddTarea(siscod, idIncidente, campos);
        }

        public DataIncidenteConCampos GetIncidente(int idIncidente, int idSistema)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes incidentes = acceso.getIMGIIncidentes();
            return incidentes.GetIncidente(idIncidente,idSistema);
        }


        public void ModificarIncidente(int idSistema, DataIncidenteConCampos incidente)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes incidentes = acceso.getIMGIIncidentes();
            incidentes.ModificarIncidente(idSistema,incidente);
        }

        public List<DataWPReporte> GetWorkPackagesDadosAltaPeriodo(List<int> sistemas, DateTime perFchIni, DateTime perFchFin)
        {
            AccesoMGIFactory acceso = AccesoMGIFactory.getInstance();
            IMGIIncidentes incidentes = acceso.getIMGIIncidentes();
            return incidentes.GetWorkPackagesDadosAltaPeriodo(sistemas, perFchIni, perFchFin);
        }

        #endregion
    }
}
